<?php 
/**
 * 此文件由 JeCat PHP Toolbox 自动创建，
 * 你可以编辑此文件，但是请小心处理，如果损坏了文档中的 识别标记 和 文档数据，JeCat PHP Toolbox 将无法完成自动维护工作。
 * 社区： http://bbs.jecat.cn
 *
 */
 /*-- Project Introduce --*/ 

/**
 * 视图类 JJ_OnlineUsersDialog 
 *
 * @access public
 */
class JJ_OnlineUsersDialog 
	//<<[UnmodifiableBlock.Start]::Extends And Implements::>>//
	extends JCAT_ViewGtk
	//<<[UnmodifiableBlock.End]::Extends And Implements::>>// 
	implements JCAT_ISingleton 
{
	
	/**
	 * 构造函数 
	 *
	 * @access	public
	 * @param	$aParent	JCAT_IViewContainer		视图的父对象(父视图 或 控制器)。注意：视图不应单独存在，必须有一个父对象！ 
	 * @return	void
	 */
	public function JJ_OnlineUsersDialog(JCAT_IViewContainer $aParent)
	{
		// 调用父类构造函数 
		//<<[UnmodifiableBlock.Start]::Call Parent Construct::>>//
		$this->JCAT_ViewGtk('JJ_OnlineUsersDialog','template.JJ_OnlineUsersDialog.glade','JJ_OnlineUsersDialog',$aParent) ;
		//<<[UnmodifiableBlock.End]::Call Parent Construct::>>// 

		$this->Initialize() ;	
	}
	
	/**
	 * 初始化 视图 
	 *
	 * @access	protected
	 * @return	void
	 */
	protected function Initialize()
	{				
		//<<[UnmodifiableBlock.Start]::View Children::>>//

		//<<[UnmodifiableBlock.End]::View Children::>>// 
		
		// 创建Gtk窗体 
		$this->Create() ;
		
		// 载入UI控件
		$sCurrentDirectory = dirname(__FILE__).'/' ;
		JCAT_Package::ImportClass('TreeOnlineUserList',$sCurrentDirectory.'Instances.UICtrl/class.TreeOnlineUserList.php') ;
		$aUICtrl = new TreeOnlineUserList($this) ;
		$this->AddUICtrl($aUICtrl) ; 
		$aUICtrl->GetMainWidget()->set_headers_visible(false) ;
		
		// 在此加入其它初始化代码 
	 	// TODO ... ...

	}
	
	/**
	 * Description
	 *
	 * @access	public
	 * @return	void
	 */
	public function Find()
	{
		if( $this->IsFinding() )
		{
			return ;
		}
		
		$this->GetChildWidget('VBoxFinding')->set_visible(true) ;
		$this->GetChildWidget('VBoxUserList')->set_visible(false) ;
		$this->GetChildWidget('LabNoOnlineUser')->set_visible(false) ;
		$this->bFinding = true ;
		$nOnlineUserCount = 0 ;

		do 
		{
			// 
			$aSetting = JJ_Setting::GetGlobalInstance() ;
			$sFindOnlineUsersUrl = $aSetting->GetItem('/JJ','FindOnlineUsersUrl') ;
			
			// 读取数据
			$nTry = 5 ;
			while(0<$nTry--)
			{
				$hFind = fopen($sFindOnlineUsersUrl,'r') ;
				if($hFind!==false)
				{
					break ;
				}
			}
			if($hFind===false)
			{
				break ;
			}

			$sOnlineUsersData = '' ;
			$arrReads = array($hFind) ;
			$arrWrites = $arrExcepts = NULL ;
			while (!feof($hFind))
			{
				$nUpdate = @stream_select($arrReads,$arrWrites,$arrExcepts,0,200) ;
				if($nUpdate>0)
				{
				  	$sOnlineUsersData.= fread($hFind, 10);
				}
			}
			fclose($hFind);

			//
			$aUserList = $this->GetUICtrl('TreeOnlineUserList') ;
			$aModel = $aUserList->GetGtkModel() ;
			if($aModel)
			{
				$aModel->clear() ;
			}

			// 分析数据
			$aXMLElement = new SimpleXMLElement($sOnlineUsersData) ;
			foreach ( $aXMLElement->children() as $aUser )
			{
				$nOnlineUserCount++ ;
				$aUserList->AppendItem( array(
							ROOT_PATH."Resource/Image/Status/22/available.png"
							, strval($aUser->JID)
				) ) ;
			}
		
		}while(0) ;
		
		
		$this->GetChildWidget('VBoxFinding')->set_visible(false) ;
		if( $nOnlineUserCount )
		{
			$this->GetChildWidget('VBoxUserList')->set_visible(true) ;
			$this->GetChildWidget('LabNoOnlineUser')->set_visible(false) ;
		}
		else 
		{
			$this->GetChildWidget('VBoxUserList')->set_visible(false) ;
			$this->GetChildWidget('LabNoOnlineUser')->set_visible(true) ;
		}
		
		$this->bFinding = false ;
	}
	
	/**
	 * Description
	 *
	 * @access	public
	 * @return	bool
	 */
	public function IsFinding()
	{
		return $this->bFinding ;
	}
	
	/**
	 * Description
	 *
	 * @access	protected
	 * @return	void
	 */
	protected function GetSelectedUser($bAlert=false)
	{
		$aUserList = $this->GetUICtrl('TreeOnlineUserList') ;
		$aItem = $aUserList->GetFirstSelectedItem() ;
		
		if( $aItem )
		{
			return $aUserList->GetCellData($aItem,TreeOnlineUserList::CLM_ID) ;
		}
		
		else 
		{
			if( $bAlert )
			{
				JCAT_Gtk::MessageDialog(JCAT_Language::Sentence('请选择用户')) ;				
			}
			
			return null ;
		}
	}
	
	/**
	 * Description
	 *
	 * @access	public
	 * @return	void
	 */
	public function OnStartChat()
	{
		$sUser = $this->GetSelectedUser(true) ;
		if(!$sUser)
		{
			return ;
		}
		
		$aAccount = JJ_Account::CreateFromString($sUser) ;
		if( !$aAccount )
		{
			return ;
		}
		
		$aSessionView = JJ_SessionWindow::GetInstance($aAccount,JJ_MainController::GetGlobalInstance()) ;
		$aSessionView->ShowView() ;
	}
	
	/**
	 * Description
	 *
	 * @access	public
	 * @return	void
	 */
	public function OnAddContact()
	{
	
		$sUser = $this->GetSelectedUser(true) ;
		if(!$sUser)
		{
			return ;
		}
		
		$aMainController = JJ_MainController::GetGlobalInstance() ;
		$aMainController->AddContact($sUser) ;		
	}
	
	/**
	 * Description
	 *
	 * @access	public
	 * @return	bool
	 */
	public function OnClose()
	{
		$this->ShowView(false) ;
		return true ;
	}
	
	/**
	 * Description
	 * 
	 * @access	private
	 * @var		bool
	 */
	private $bFinding = FALSE ;
}

?><?
/**
 * [注意!!]
 *	以下内容由 JCAT PHP Toolbox 自动维护，手动更改的内容会被 JCAT PHP Toolbox 抹除，
 *	同时还可能破坏格式，导致 JCAT PHP Toolbox 无法正常读取。
 */
/*<<[UnmodifiableBlock.Start]::Coder Dialog Data::>>&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//
<<{{DocumentClass:ViewGtkDoc}}>>
eCVEQSU5RFQlREIlOEUlQTM4JTEwJTdEX2klM0ZiJUY4JTgwJTAxciVEOSU5OSUyMSVBMyU5MSUwOCU5NyUwOCUyQiVDMDglNjAlRjclQTZfRmxiJUE1JTBEJTBFJUI0JTgwUSU5QSVCNCVGMiVFRiU3QkwlQkElN0IlMUYlMjYlRDMlMEYlRkIlNjAlRDklQUUlMkFXJTlEJTNBdSVBMHAlMjYlQ0VzJUU3JUNDJTFDJUMz
JTJGJUZBJUMyWCUxNCVDRSUyNyU3RCVCNyVBNyU4RSVDMSVBNTh5JUFBJUU4JUJBJUE0OCUwQWMlMDElRTMlQzQxJTg4JUU3JUU2JTNGJUI0ZyVENVclQTMlMEQlMkZZJTk0JThCJUUzJUEzJTJBeiVGMSVCRCVFOCUxRiVCNCVGNTMlOUUlOUIlMEYlQ0RRJTk4JTg1JTEyJUMyJUZDJURFNiVBNSVEOCVGNSUyNiUxMSU1
RSVEMSU5QmVpbkQlRDclRkNsdyVDMiVGQyVFRiVBOSVEOSVCRiUxQyUzRSUxMiVGMiUyMyVBRCU5NSVBQyUwNSVFQkQlREIlRjklQjJQJUNEJUUxJUUzQSUxNSVGQjclMTBxJTIxJUVCJTNCJUI5JTNGJTg4JTNFJUYyJUI1bWIlMDElRDglOERXYyUzQyVBMEQlRjVrJTE1XyVCNiVBMyVEMTElRUMlMTElRTclQjUlQ0Il
RDclMDYlREYlQ0IlRjMlMTIlRkElREElRTElQTclQkYlREUlRUZwJTI0TnRmJUZBJTI4JURBJUEyJTk3TW0lRUUlQjQlRTV2cyU4RiUwRiU4RiUyMyVBQSUyRiU4MCUwQSU5QyVFMiUyOCVFQSVCRSU4QnQlQjklQjBpJThGJUM2JTIyWSU1Q0YlMDAlREUlODNUJUZCViVENHpMJTE4JTlCdCUyQyUxQyVBNnolNUVzJUM3
JTE4JUYzJThGaSUzRSVFQiU5MXglN0QlQUIlQkMlQTYlRUVBJTk1aCVGRGYlQTclM0QlOThVJUZEJTNBJUNCJUQ5JTVCJUQwJTVCJUQyMSU2MCUzRiVDQSUwMCUxOSUyNyVFOCVGMCVFQiVENyVFN2clQkMlRkQlQTklMDElOEQlMUQ5JUJGJTI2JUJFJTVDJUJFJTdEJUZCJUYzJTBGJUUxJUYxJTgwJUIyTiVEMSU5MiUw
RSU4NEUlMTZhJUUxci0lQjklOTclOTQlMTFsYSVCNiVBQiUyQSUxNVclMDklRTElMUUlRjclRTJqJUE2UiU5RiVBQU0lRTklRjYlODglRjNJJTVFWSUyNFclN0UlN0MlMjZnJTI2JUQ5JThDJUYyJTA4JUJFWCVEMSU3QyUyOSVFMSU5QnMlQzlOJTg5ZFYlRUMlQjElMTklRjYlMjElQ0QlQjAlODdhdyU5RiVCMVMlMUFS
JTE1JUU3YSVGNiU5MmNJJTE4X2JfJUUxJTNFJUM1JTNBJUVCJUY3JUQ3cyVCOCVCQyU5M2xOJUVERm1yJUFBJUQyJTNDJUI5JTI3OSVGNyUwOSUwQiU4NiU3QiU4RiVDRDclMkIlQTVIJUVFJUNFJTEwayUxMyVCNiVCNXclRjVWJUM1QSUwQyU5QyVDMCUxRGwlODElODclNUIlRUIlQjE2JUY3JUU5JURGJTAxeiVEOSUy
QXolODYlQ0YlQzclOUUlRUIlOUQlNUQlRUYlMEMlM0UlM0ZUJUVCJThDJTJGNyVDOCU5QiVFOCVEQyVGQSU5Q2ElRjclRjglMEElM0RMJUU5JUMwJUMzJTE4SyVEQiU5MyU4MSU5RGElMEYlRTIlMDElRkQlQUQlQzAlRDV5JUFCJTEyJURGJTdEJTAyJTE2JTYwJTI3JTFFJUM5JTIzJTlCJUU0JUMxJTg5MCU4QSVCQiUw
QiU1RSVFM1klRTIlMDclRTAlOTRnJUMwJTA5JUFFJTEzXyVDNyVBRCVDMSUyRiVCNSU5MnUuLSVCNSUwMSVBNiVENCUwNyVGNiVGQyUwMGwlQUVKJTE5JUVFTCVERiU5MyVFRCVCNWclQ0QlRjlhWiVBMCUzRSVFQSVEQSUxQiUxNiU4MiVBRiUwM2pWJUMzJTNFJUIzJUMwJUE3JThCJTFFJUFFJThCJTk2JTBDJUI5JUY2
JTgxJUM2JTYwJTJDLiVEMiVCMW9JbjIlQkYlRkUlMTliJUVFJUE1JUZGJUU4JTBGJUUxJTNEJUU1TSU1RSU3RS0lQjd1NyU5OSVEOSVCN3QlRjclREIlRUMlRkZPJTdFYyU1QyVFRSUyMnYlRkIlQTRHRSU4NyVFQiVBOCVFODklMUV2diVBNCVEMislRDQlRjQlODJyeiVEQWolRjklMjlIJTQwJThGJUI4JUQ0YyVFNncl
QTBrJUEyJTE3JUFGKyUyNyVDNiVFNiU4OCU5RGclOTBlJTBBJTI5JTI0JTE2JTFCZUMlQ0JqJTk0JTA2JTNEJUIzJTEzYiUxMSVCMyVEMSUxMiUzQyVDNSUxQSVFQiU4MCU5MWclRUMlMjklQzkrJTA1JUY3JUMzJTA3UCU3QiVCOSVGQyUwQiVGMjglRDUlRjk!
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&<<[UnmodifiableBlock.End]::Coder Dialog Data::>>*/
?>